package com.idis.dbApp.mapper;

import com.idis.entity.Work;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;

import java.util.List;

/**
 * Created by Ming on 2018/1/28.
 */

/**
 * 作品数据操作
 */
@Mapper
public interface WorkMapper {

    /**
     * 获取所有作品信息
     * @return 作品信息集
     */
    @Select({
            "select * from work"
    })
    List<Work> findAll();

    /**
     * 根据作品类型搜索作品
     * @param type 作品类型代号
     * @return 作品集
     */
    @Select({
            "select * from work",
            "where type = #{type,jdbcType=INTEGER}"
    })
    List<Work>  findByType(Integer type);

    /**
     * 根据作品名称模糊搜索作品
     * @param name 作品名称
     * @return 作品集
     */
    @Select({
            "select * from work",
            "where name like '%#{name,jdbcType=VARCHAR}%'"
    })
    List<Work> findLikeName(String name);

    /**
     * 根据examole有效属性值搜索作品，空信息无效
     * @param example 作品
     * @return 作品集
     */
    @SelectProvider(type = WorkSqlProvider.class,method = "selectByExample")
    List<Work> findByProperty(Work example);

    /**
     * 删除作品
     * @param id 作品ID
     * @return 成功删除的数量
     */
    @Delete({
        "delete from work",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int deleteByPrimaryKey(Long id);

    /**
     * 插入新作品记录
     * @param record 作品
     * @return 成功插入的数量
     */
    @Insert({
        "insert into work (content, ",
        "picture, name,type)",
        "values ( #{content,jdbcType=VARCHAR}, ",
        "#{picture,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},#{type,jdbcType=INTEGER})"
    })
    int insert(Work record);

    /**
     * 插入新作品，仅插入非空信息
     * @param record 作品
     * @return 成功插入的数量
     */
    @InsertProvider(type=WorkSqlProvider.class, method="insertSelective")
    int insertSelective(Work record);

    /**
     * 根据ID查询作品
     * @param id 作品ID
     * @return 作品
     */
    @Select({
        "select",
        "id, content, picture, name,type",
        "from work",
        "where id = #{id,jdbcType=INTEGER}"
    })
    @Results({
        @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
        @Result(column="content", property="content", jdbcType=JdbcType.VARCHAR),
        @Result(column="picture", property="picture", jdbcType=JdbcType.VARCHAR),
        @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
        @Result(column="type", property="type", jdbcType=JdbcType.INTEGER)
    })
    Work selectByPrimaryKey(Integer id);

    /**
     * 更新作品，仅更新非空属性，ID必须
     * @param record 作品
     * @return 成功更新的数量
     */
    @UpdateProvider(type=WorkSqlProvider.class, method="updateByPrimaryKeySelective")
    int updateByPrimaryKeySelective(Work record);

    /**
     * 更新作品，ID必须
     * @param record 作品
     * @return 成功更新的数量
     */
    @Update({
        "update work",
        "set content = #{content,jdbcType=VARCHAR},",
          "picture = #{picture,jdbcType=VARCHAR},",
          "name = #{name,jdbcType=VARCHAR},",
            "type=#{type,jdbcType=INTEGER}",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int updateByPrimaryKey(Work record);
}